package cn.ycc1.boot3config;

import cn.ycc1.boot3config.properties.PersonConfigurationProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.ImportResource;

/**
 * 1. profile多环境支持
 * application-{profile}.yml // 多profile配置文件
 * application.yml // 主配置文件
 *
 * 文档块的方式 yml的文档块模式
 * spring.profiles.active=dev
 * 命令行参数的方式
 * java -jar spring-boot-config.jar --spring.profiles.active=dev
 * idea中配置 VM options: --spring.profiles.active=dev 运行参数
 * vm options: -Dspring.profiles.active=dev 虚拟机参数
 *
 * 2. 配置文件加载位置和优先级 优先级从高到低
 * file:/config/
 * file:/
 * classpath:/config/
 * classpath:/
 *
 * spring.config.location= classpath:/custom.properties // 自定义配置文件位置
 * 四个文件都加载，从低到高形成互补配置
 *
 * 3. 外部配置加载顺序 所有的配置文件加载位置都启用，只是优先级不一样，优先级高的会覆盖低的，并且互补
 * 命令行参数
 * java -jar spring-boot-config.jar --server.port=8081
 * -- 表示命令行参数
 * 优先加载带profile的配置文件，由jar包外向jar内寻找
 * server.context-path=
 */

//@ImportResource(locations = {"classpath:beans.xml"}) // 推荐使用配置类的方式实现
@SpringBootApplication
// @EnableConfigurationProperties(PersonConfigurationProperties.class)
// @EnableConfigurationProperties({PersonConfigurationProperties.class}) // 也会加入到bean中
// 配置文件占位符 随机数，占位符获取之前配置的值，还可以设置默认值
public class Boot3ConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(Boot3ConfigApplication.class, args);
    }

}
